home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 351-375 / disk_351 / pdc / libsrc.lzh / LibSrc / SysIO / lseek.c < prev    next >
C/C++ Source or Header  |  1990-04-07  |  1KB  |  61 lines

  1. /*
  2.  * Libraries and headers for PDC release 3.3 (C) 1989 Lionel Hummel.
  3.  * PDC Software Distribution (C) 1989 Lionel Hummel and Paul Petersen.
  4.  * PDC I/O Library (C) 1987 by J.A. Lydiatt.
  5.  *
  6.  * This code is freely redistributable upon the conditions that this 
  7.  * notice remains intact and that modified versions of this file not
  8.  * be included as part of the PDC Software Distribution without the
  9.  * express consent of the copyright holders.  No warrantee of any
  10.  * kind is provided with this code.  For further information, contact:
  11.  *
  12.  *  PDC Software Distribution    Internet:                     BIX:
  13.  *  P.O. Box 4006             or hummel@cs.uiuc.edu            lhummel
  14.  *  Urbana, IL  61801-8801       petersen@uicsrd.csrd.uiuc.edu
  15.  */
  16.  
  17. /*    lseek.c
  18.  *
  19.  *    long lseek(fd, offset, origin)    - move read/write file pointer
  20.  *    int fd;
  21.  *    long offset;
  22.  *    int origin;
  23.  */
  24.  
  25. #include    <errno.h>
  26. #include    <fcntl.h>
  27.  
  28. extern long IoErr(), Seek();
  29. extern void Chk_Abort();
  30.  
  31. long
  32. lseek(fd, offset, origin)
  33. int fd;
  34. long offset;
  35. int origin;
  36. {
  37.     struct _device *p;
  38.     extern struct _device *_devtab;
  39.  
  40.     Chk_Abort();
  41.     p = &_devtab[fd];
  42.     if ( !(0 < fd && fd < _numdev) || !p->_fileHandle) {
  43.         errno = EBADF;
  44.         return(-1);
  45.     }
  46.     /*
  47.      * Use AmigaDos Seek to move to the required offset.
  48.      */
  49.  
  50.     if ( Seek(p->_fileHandle, offset, (long)(origin-1)) == -1) {
  51.         errno = IoErr();
  52.         return(-1);
  53.     }
  54.  
  55.     /*
  56.      * Return the new position in the file in bytes from the start.
  57.      */
  58.  
  59.     return( Seek(p->_fileHandle, 0L, 0L) );
  60. }
  61.